#pragma once
#include <SFML/Graphics.hpp>
#include <boost/scoped_ptr.hpp>
#include "Managers.h"

namespace nelsk
{
	class Engine
	{
	public:
		Engine();
		~Engine();

		void StartGame();

		TileSheetManager& GetTileSheetManager();
		GameObjectManager& GetGameObjectManager();
		PhysicsManager& GetPhysicsManager();
		InputManager& GetInputManager();
		sf::RenderWindow& GetRenderWindow();

	private:
		sf::RenderWindow _window;
		TileSheetManager _tileSheetManager;
		GameObjectManager _gameObjectManager;
		PhysicsManager _physicsManager;
		InputManager _inputManager;

		sf::Sprite _mySprite;

		// Initializes the engine
		bool Init();
		// Main game loop
		void Mainloop();
		// Renders one frame
		void Draw();
		// processes user input
		void ProcessInput();
		// Updates all Engine internals
		void Update();
	};
}

